package com.qiyue.admin.biz.base.log;

import com.qiyue.admin.entity.base.log.BizLogDateilEntity;
import com.qiyue.admin.entity.base.log.BizLogEntity;
import com.qiyue.admin.model.BizLogDateilModel;
import com.qiyue.admin.repository.base.log.BizLogDateilRepository;
import com.qiyue.common.biz.BaseBiz;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * created by yebinghuan on 2018/3/29
 */
@Service
public class BizLogDateilBiz extends BaseBiz<BizLogDateilRepository, BizLogDateilEntity, Long> {



    public List<BizLogDateilEntity> saveLog(Object obj, BizLogEntity bizLog,boolean isList) throws IllegalAccessException {


        List<BizLogDateilEntity> entitys =null;
        if (isList){
            entitys = getEntityReflect((List)obj,bizLog);
        }else{
            entitys = getEntityReflect(obj,bizLog);
        }
        if (entitys !=null){
            entitys =  this.save(entitys);

        }

        return  entitys;
    }




    /**
     * 利用反射获取键值
     * @param obj
     * @return
     */
    public List<BizLogDateilEntity> getEntityReflect(Object obj,BizLogEntity bizLog) throws IllegalAccessException {

        List<BizLogDateilEntity> entityList = new ArrayList<BizLogDateilEntity>();
        Field fields[] = obj.getClass().getDeclaredFields();
        int size= fields.length;
        for( int i= 0; i<size;i++){
            //修改私有权限
            if(!fields[i].isAccessible()){
                fields[i].setAccessible(true);
            }

            BizLogDateilEntity entity = new BizLogDateilEntity();
            BizLogDateilModel model =new BizLogDateilModel();
            //获取字段名称
            model.setCloumnName(fields[i].getName());
            //获取字段的属性
            model.setCloumnValue(String.valueOf(fields[i].get(obj)));
            model.setClounmnType(fields[i].getGenericType()+"");
            //获取字段的注解中的value

           if(  fields[i].getAnnotation(ApiModelProperty.class) != null){
               model.setCloumnText( fields[i].getAnnotation(ApiModelProperty.class).value());
           }


            BeanUtils.copyProperties(model,entity);
            //输入列号
            entity.setCloumnNum(i);
            entity.setBizLog(bizLog);
            entityList.add(entity);

        }
        return  entityList;
    }


    /**
     * 利用反射获取键值
     * @param objs
     * @return
     * @throws IllegalAccessException
     */
    public List<BizLogDateilEntity> getEntityReflect(List<Object> objs,BizLogEntity bizLog) throws IllegalAccessException {

        List<BizLogDateilEntity> entityList = new ArrayList<BizLogDateilEntity>();

       int objsSize = objs.size();

       for( int i=0; i<objsSize; i++){
           Field fields[] = objs.get(i).getClass().getDeclaredFields();
           int size= fields.length;
           for( int j= 0; j<size;j++){
               //修改私有权限
               if(!fields[j].isAccessible()){
                   fields[j].setAccessible(true);
               }
               BizLogDateilEntity entity = new BizLogDateilEntity();
               BizLogDateilModel model =new BizLogDateilModel();
               //获取字段名称
               model.setCloumnName(fields[j].getName());
               System.err.println(fields[j].getName());
               //获取字段的属性
               model.setCloumnValue(String.valueOf(fields[j].get(objs.get(i))));
               model.setClounmnType(fields[j].getGenericType()+"");
               //获取字段的注解中的value
               if( fields[j].getAnnotation(ApiModelProperty.class) != null){
                   model.setCloumnText( fields[j].getAnnotation(ApiModelProperty.class).value());
               }
               BeanUtils.copyProperties(model,entity);
               //输入列号
               entity.setCloumnNum(j);
               //注入行号
               entity.setRowNum(i);
               entity.setBizLog(bizLog);
               entityList.add(entity);
           }

       }


        return  entityList;
    }


}
